'use strict'
import Vue from 'vue'
import axios from 'axios'
import qs from 'qs'

const baseURL = '/'
const  timeout = 1000


import {Message} from 'element-ui'
axios.interceptors.request.use(config => {
    // 请求拦截器
    // console.log('请求',config)
    // loading
    return config
}, error => {
    return Promise.reject(error)
})

axios.interceptors.response.use(response => {
    return response
}, error => {
    return Promise.resolve(error.response)
})

function checkStatus (response) {
    //响应拦截器（最外层）
    // loading
    // 如果http状态码正常，则直接返回数据
    if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
        return response
        // 如果不需要除了data之外的数据，可以直接 return response.data
    }
    // 异常状态下，把错误信息返回去
    return {
        status: -404,
        msg: '网络异常'
    }
}

function checkCode (res) {
    //响应拦截器（内层）
    // 如果code异常(这里已经包括网络错误，服务器错误，后端抛出的错误)，可以弹出一个错误提示，告诉用户
    // $message('这是一条消息提示');
    if (res.status && res.status === -404) {
        Message({message:(res.status  + (res.msg || '服务器请求错误')),type: 'error'})
    }
    // if (res.data && (!res.data.success)) {
    //     Message({message:(res.data.status || 500 + ( res.data.error_msg|| '服务器请求错误') ),type: 'error'})
    // }
    return res.data
}

export default {
    post (url, data) {
        return axios({
            method: 'post',
            baseURL,
            url,
            data: qs.stringify(data),
            timeout,
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            }
        }).then(
            (response) => {
                return checkStatus(response)
            }
        ).then(
            (res) => {
                return checkCode(res)
            }
        )
    },
    get (url, params) {
        return axios({
            method: 'get',
            baseURL,
            url,
            params, // get 请求时带的参数
            timeout,
            headers: {
                'X-Requested-With': 'XMLHttpRequest'
            }
        }).then(
            (response) => {
                return checkStatus(response)
            }
        ).then(
            (res) => {
                return checkCode(res)
            }
        )
    }
}
